package demo2;
abstract class Shape {
    //abstract修饰的就表示抽象类或者抽象方法

    public String name;//抽象类当中可以定义普通变量
    public static int age;// 抽象类当中可以定义静态变量
    public static void Animal() {
        //抽象类当中可以定义静态方法
    }
    public  void Animal1() {
        //抽象类当中可以定义普通成员方法
    }

    public abstract void draw();//抽象类当中不一定包含抽象方法

   /* public void draw() {
        //此时这个方法是没有去具体的工作的，所以这就是一个抽象方法
    }
    //包含抽象方法的类叫做抽象类*/

}
class Cycle extends Shape {
    //一个普通类继承我们的抽象类之后，此时在普通类当中一定要重写抽象类的抽象方法
        @Override
        public void draw() {
            System.out.println("⚪");
        }


}
/*abstract class Cycle extends Shape {
    //一个普通类继承我们的抽象类之后，此时在普通类当中一定要重写抽象类的抽象方法
        *//*@Override
        public void draw() {
            System.out.println("⚪");
        }*//*
    //当我们的子类方法被abstract修饰之后就可以不重写抽象方法了
    public abstract void test();
}*/
class A extends Cycle {
    //A此时继承的子类Cycle，我们必须重写Cycle的抽象方法，并且重写Cycle父类的抽象方法
    //出来混迟早是要还的

    @Override
    public void draw() {

    }


}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("◇");
    }
}

public class Test2 {
    public static void drawMap(Shape shape) {
        shape.draw();
    }
    public static void main(String[] args) {
        drawMap(new Cycle());
        drawMap(new Rect());
    }
}
